home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / applet / AppletClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  4.4 KB  |  162 lines

  1. package sun.applet;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.net.URL;
  7. import java.net.URLConnection;
  8. import java.util.Hashtable;
  9. import sun.misc.MessageUtils;
  10.  
  11. class AppletClassLoader extends ClassLoader {
  12.    boolean verboseClassLoading = false;
  13.    Hashtable classes = new Hashtable();
  14.    URL base;
  15.  
  16.    AppletClassLoader(URL var1) {
  17.       this.base = var1;
  18.    }
  19.  
  20.    private Class loadClass(URL var1) throws IOException {
  21.       InputStream var2 = null;
  22.  
  23.       try {
  24.          Class var18;
  25.          try {
  26.             URLConnection var5 = var1.openConnection();
  27.             var5.setAllowUserInteraction(false);
  28.             var2 = var5.getInputStream();
  29.             int var6 = var5.getContentLength();
  30.             byte[] var7 = new byte[var6 == -1 ? 4096 : var6];
  31.             int var8 = 0;
  32.             Thread var10 = Thread.currentThread();
  33.  
  34.             int var9;
  35.             while((var9 = var2.read(var7, var8, var7.length - var8)) >= 0 && !var10.isInterrupted()) {
  36.                if ((var8 += var9) == var7.length) {
  37.                   if (var6 >= 0) {
  38.                      break;
  39.                   }
  40.  
  41.                   byte[] var11 = new byte[var8 * 2];
  42.                   System.arraycopy(var7, 0, var11, 0, var8);
  43.                   var7 = var11;
  44.                }
  45.             }
  46.  
  47.             if (var10.isInterrupted()) {
  48.                throw new IOException("class loading interrupted: " + var1);
  49.             }
  50.  
  51.             var18 = ((ClassLoader)this).defineClass(var7, 0, var8);
  52.          } finally {
  53.             if (var2 != null) {
  54.                var2.close();
  55.             }
  56.  
  57.          }
  58.  
  59.          return var18;
  60.       } catch (IOException var16) {
  61.          ((Throwable)var16).printStackTrace();
  62.          throw var16;
  63.       } catch (Throwable var17) {
  64.          var17.printStackTrace();
  65.          throw new IOException("class not loaded: " + var1);
  66.       }
  67.    }
  68.  
  69.    public Class loadClass(String var1) throws ClassNotFoundException {
  70.       return this.loadClass(var1, true);
  71.    }
  72.  
  73.    protected Class loadClass(String var1, boolean var2) throws ClassNotFoundException {
  74.       Class var3 = (Class)this.classes.get(var1);
  75.       if (var3 == null) {
  76.          SecurityManager var4 = System.getSecurityManager();
  77.          if (var4 != null) {
  78.             int var5 = var1.lastIndexOf(46);
  79.             if (var5 >= 0) {
  80.                var4.checkPackageAccess(var1.substring(0, var5));
  81.             }
  82.          }
  83.  
  84.          try {
  85.             return ((ClassLoader)this).findSystemClass(var1);
  86.          } catch (Throwable var6) {
  87.             var3 = this.findClass(var1);
  88.          }
  89.       }
  90.  
  91.       if (var3 == null) {
  92.          throw new ClassNotFoundException(var1);
  93.       } else {
  94.          if (var2) {
  95.             ((ClassLoader)this).resolveClass(var3);
  96.          }
  97.  
  98.          return var3;
  99.       }
  100.    }
  101.  
  102.    void errorMsg(String var1, String var2) {
  103.       System.err.println(MessageUtils.substProp("appletloader." + var1, var2));
  104.    }
  105.  
  106.    void errorMsg(String var1, String var2, String var3) {
  107.       System.err.println(MessageUtils.substProp("appletloader." + var1, var2, var3));
  108.    }
  109.  
  110.    private synchronized Class findClass(String var1) {
  111.       Class var2 = (Class)this.classes.get(var1);
  112.       if (var2 != null) {
  113.          return var2;
  114.       } else {
  115.          if (this.verboseClassLoading) {
  116.             System.out.println(Thread.currentThread().getName() + " find class " + var1);
  117.          }
  118.  
  119.          SecurityManager var3 = System.getSecurityManager();
  120.          if (var3 != null) {
  121.             int var4 = var1.lastIndexOf(46);
  122.             if (var4 >= 0) {
  123.                var3.checkPackageDefinition(var1.substring(0, var4));
  124.             }
  125.          }
  126.  
  127.          String var14 = var1.replace('.', '/') + ".class";
  128.  
  129.          try {
  130.             URL var5 = new URL(this.base, var14);
  131.             if (this.verboseClassLoading) {
  132.                System.out.println("Opening stream to: " + var5 + " to get " + var1);
  133.             }
  134.  
  135.             var2 = this.loadClass(var5);
  136.             if (!var1.equals(var2.getName())) {
  137.                Class var6 = var2;
  138.                Object var13 = null;
  139.                throw new ClassFormatError(var1 + " != " + var6.getName());
  140.             }
  141.  
  142.             this.classes.put(var1, var2);
  143.          } catch (FileNotFoundException var7) {
  144.             this.errorMsg("filenotfound", var1);
  145.          } catch (ClassFormatError var8) {
  146.             this.errorMsg("fileformat", var1);
  147.          } catch (IOException var9) {
  148.             this.errorMsg("fileioexception", var1);
  149.          } catch (Exception var10) {
  150.             this.errorMsg("fileexception", ((Throwable)var10).toString(), var1);
  151.          } catch (ThreadDeath var11) {
  152.             this.errorMsg("filedeath", var1);
  153.             throw var11;
  154.          } catch (Error var12) {
  155.             this.errorMsg("fileerror", ((Throwable)var12).toString(), var1);
  156.          }
  157.  
  158.          return var2;
  159.       }
  160.    }
  161. }
  162.